一開始我先加入三個 input 規則來做 demo,本例為開啟防火牆的 80、443 與 22 port
sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
- -A:對某條 iptable 的 chain 進行規則加入或插入
- -i:封包進入的網路介面,本例為 eth0,也是主機上的連線網卡名稱
- -p:規則適用的網路協定,例如 tcp、udp,本例的 service 都是用 tcp 協定
- –dport:目標 ip
- -j:本條規則的作動行為,例如 ACCEPT、DROP、REJECT
查看 iptables 的 INPUT chain 規則
sudo iptables -L INPUT -n --line-number
- -L:列出
- -n:不進行 ip 與 hostname 的反查
- –line-number:顯示規則的行號
# 執行結果:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
有了每條規則的 line number,要刪除就很容易了,下面試範刪除第二條 443 port 的規則
sudo iptables -D INPUT 2
- -D:刪除
- INPUT 2: input chain 裡的第二條規則,數字代表該規則的行號
再次查看,443 port 的規則確實刪掉了,其它行也可以如法炮製,注意,每做一次刪除,行號就會有所變動!
sudo iptables -L INPUT -n --line-number
# 執行結果:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
參考資料: